class Card:
    def __init__(self,cardId,cardPwd,money):
        self.cardId = cardId
        self.cardPwd = cardPwd
        self.money = money
        self.cardLock = False
class User:
    def __init__(self, name, id, phone, card):
        self.name = name
        self.id = id
        self.phone = phone
        self.card = card
class Admin:
    adminU = '1'
    adpwd = '1'
    def printAdminView(self):
        print("******************************************")
        print("***                                    ***")
        print("***                                    ***")
        print("***         欢迎登录银行系统            ***")
        print("***                                    ***")
        print("***                                    ***")
        print("******************************************")
    def printsysFunctionView(self):
        print("***********************************************")
        print("***                                         ***")
        print("***    1.开户(1)                2.查询(2)   ***")
        print("***    3.取款(3)                4.存款(4)   ***")
        print("***    5.转账(5)                6.锁定(6)   ***")
        print("***    7.解锁(7)                            ***")
        print("***                                         ***")
        print("***    退出(Q)                              ***")
        print("***                                         ***")
        print("***********************************************")
    def adminOption(self):
        adminInput = input("请输入管理员账户：")
        if self.adminU != adminInput:
            print("管理员账户输入错误......")
            return -1
        passwordInput = input("请输入密码：")
        if self.adpwd != passwordInput:
            print("输入密码有误......")
            return -1
        else:
            print("操作成功，请稍后......")
            return 0
from user import User
from card import Card
class ATM:
    def __init__(self, alluser):
        self.alluser = alluser
import random
def randomiCardId(self):
    while True:
        str_data = ''
        for i in range(6):
            ch = chr(random.randrange(ord('0'), ord('9') + 1))
            str_data += ch
        if not self.alluser.get(str):
            return str_data
def creatUser(self):
    name = input("请输入姓名:")
    Uid = input("请输入身份证号:")
    phone = input("请输入手机号:")
    prestMoney = float(input("请输入预存金额:"))
    if prestMoney <= 0:
        print("预存款输入有误，开户失败")
        return -1
    oncePwd = input("请输入密码：")
    passWord = input("请再次输入密码：")
    if passWord != oncePwd:
        print("两次密码输入不同......")
        return -1
    print("密码设置成功，请牢记密码:  %s " % passWord)
    cardId = self.randomiCardId()
    card = Card(cardId, oncePwd, prestMoney)
    user = User(name, Uid, phone, card)
    self.alluser[cardId] = user
    print("您的开户已完成，请牢记开户账号: %s" % cardId)
def checkpwg(self, realPwd):
    for i in range(3):
        psd2 = input("请输入密码：")
        if realPwd == psd2:
            return True
    print("密码输错三次，系统自动退出......")
    return False
def lockCard(self):
    inptcardId = input("请输入您的卡号：")
    user = self.alluser.get(inptcardId)
    if not self.alluser.get(inptcardId):
        print("此卡号不存在...锁定失败！")
        return -1
    if user.card.cardLock:
        print("该卡已经被锁定，无需再次锁定！")
        return -1
    if not self.checkpwg(user.card.cardPwd):
        print("密码错误...锁定失败！！")
        return -1
    user.card.cardLock = True
    print("该卡被锁定成功！")
def searchUser(self, base=1):
    if base == 2:
        inptcardId = input("请输入转出主卡号：")
    elif base == 3:
        inptcardId = input("请输入转入卡号：")
    elif base == 1:
        inptcardId = input("请输入您的卡号：")
    user = self.alluser.get(inptcardId)
    if not self.alluser.get(inptcardId):
        print("此卡号不存在...查询失败！")
        return -1
    if user.card.cardLock:
        print("该用户已经被锁定...请解卡后使用！")
        return -1
    if not self.checkpwg(user.card.cardPwd):
        print("密码错误过多...卡已经被锁定，请解卡后使用！")
        user.card.cardLock = True
        return -1
    if not base == 3:
        print("账户: %s   余额: %.2f  " % (user.card.cardId, user.card.money))
    return user
def getMoney(self):
    userTF = self.searchUser()
    if userTF != -1:
        if userTF.card.cardId != '':
            inptMoney = float(input("请输入取款金额:"))
            if inptMoney > int(userTF.card.money):
                print("输入的金额大于余额，请先查询余额！")
                return -1
            userTF.card.money = float(userTF.card.money) - inptMoney
            print("取款成功！  账户: %s   余额: %.2f  " %
                (userTF.card.cardId, userTF.card.money))
    else:
        return -1
def saveMoney(self):
    userTF = self.searchUser()
    if userTF != -1:
        if not userTF.card.cardLock == True:
            if userTF.card.cardId != '':
                inptMoney = float(input("请输入要存入得金额:"))
                if inptMoney < 0:
                    print("请输入正确金额")
                else:
                    userTF.card.money += inptMoney
                    print("存款成功！  账户: %s   余额: %.2f  " %
                          (userTF.card.cardId, userTF.card.money))
    else:
        return -1
def transferMoney(self):
    MasterTF = self.searchUser(base=2)
    if (MasterTF == -1):
        return -1
    userTF = self.searchUser(base=3)
    if (userTF == -1):
        return -1
    in_tr_Money = float(input("请输入转账金额："))
    if MasterTF.card.money >= in_tr_Money:
        str = input("您确认要继续转账操作吗(y/n)?:")
        if str.upper() == "Y":
            MasterTF.card.money -= in_tr_Money
            userTF.card.money += in_tr_Money
            print("转账成功！  账户: %s   余额: %.2f  " %
                  (MasterTF.card.cardId, MasterTF.card.money))
        else:
            print("转账失败，中止了操作")
    else:
        print("转账失败,余额不足！  账户: %s   余额: %.2f  " %
              (MasterTF.card.cardId, MasterTF.card.money))
def unlockCard(self):
    inptcardId = input("请输入您的卡号：")
    user = self.alluser.get(inptcardId)
    while 1:
        if not self.alluser.get(inptcardId):
            print("此卡号不存在...解锁失败！")
            return -1
        elif not user.card.cardLock:
            print("该卡未被锁定，无需解锁！")
            break
        elif not self.checkpwg(user.card.cardPwd):
            print("密码错误...解锁失败！！")
            return -1
            user.card.cardLock = False
        print("该卡 解锁 成功！")
        break
from admin import Admin
from atm import ATM
import time
class HomePage:
    def __init__(self):
        self.allUserD = {}
        self.atm = ATM(self.allUserD)
        self.admin = Admin()
    def saveUser(self):
        self.allUserD.update(self.atm.alluser)
        print("数据存盘成功")
    def main(self):
        self.admin.printAdminView()
        resL = self.admin.adminOption()
        if not resL:
            while True:
                self.admin.printsysFunctionView()
                option = input("请输入您的操作：")
                if option not in ("1", "2", "3", "4", "5",
                                  "6", "7", "S", "Q", "q"):
                    print("输入操作项有误,请仔细确认！")
                    time.sleep(1)
                if option == "1":
                    self.atm.creatUser()
                elif option == "2":
                    self.atm.searchUser()
                elif option == "3":
                    self.atm.getMoney()
                elif option == "4":
                    self.atm.saveMoney()
                elif option == "5":
                    self.atm.transferMoney()
                elif option == "6":
                    self.atm.lockCard()
                elif option == "7":
                    self.atm.unlockCard()
                elif option.upper() == "Q":
                    if not (self.admin.adminOption()):
                        self.saveUser()
                        print('退出系统')
                        return -1
if __name__ == "__main__":
    homepage = HomePage()
    homepage.main()